import { Injectable } from '@nestjs/common';
import * as svgCaptcha from 'svg-captcha'; // 引入 svg-captcha 库
import { v4 as uuidv4 } from 'uuid'; // 引入 uuid
import { ApiResponse } from '@common/interfaces/api-response.interface'

@Injectable()
export class CaptchaService {
  // 存储验证码的集合，使用 Map 按会话 ID 存储
  private readonly captchas = new Map<string, { text: string; expire: number }>();
  // 生成验证码
  async generateCaptcha(sessionId: string): Promise<ApiResponse<any>> {
    try {
      const captcha = svgCaptcha.create();
      // 存储验证码，设置5分钟过期
      this.captchas.set(sessionId, {
        text: captcha.text.toLowerCase(), // 转小写存储，方便校验
        expire: Date.now() + 5 * 60 * 1000, // 5分钟过期
      });
      return {
        code: 200,
        message: '获取验证码成功',
        data: {
          image: captcha.data,
          text: captcha.text,
        },

      };
    } catch (error) {
      throw new Error('无法生成验证码');
    }
  }

  // 验证验证码
  validateCaptcha(sessionId: string, captchaText: string): boolean {
    const captcha = this.captchas.get(sessionId);

    // 验证码不存在或已过期
    if (!captcha || captcha.expire < Date.now()) {
      this.captchas.delete(sessionId); // 删除过期验证码
      return false;
    }

    // 验证后删除验证码，防止重复使用
    this.captchas.delete(sessionId);

    // 比对验证码（不区分大小写）
    return captcha.text === captchaText.toLowerCase();
  }
} 